package org.example;

import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class spark1 {
    public static void main(String[] args) {
    //创建运行环境
        final JavaSparkContext sc = new JavaSparkContext("local","spark");
        final List<Integer> nums = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        final JavaRDD<Integer> rdd = sc.parallelize(nums);
        System.out.println(rdd.collect());
        System.out.println(rdd.partitions().size());
//   1.文件读取
        final JavaRDD<String>rddText = sc.textFile("C:\\Users\\Administrator\\Desktop\\text.txt",5);
        System.out.println(rddText.collect());
//   2.文件分布式存储
        rddText.saveAsTextFile("output");
//     map映射
//        final JavaRDD<Object> mapRDD =rdd.map(new Function<Integer, Object>() {
//            @Override
//            public Object call(Integer integer) throws Exception {
//                return integer * 2;
//            }
//        });
//    lambda语法：当匿名函数只有一个复写方法则可以用箭头函数替代
//        final JavaRDD<Object> mapRDD =rdd.map((Function<Integer, Object>) integer -> integer * 2 );
//    能省则省：return 分号  大括号  小括号  参数和箭头  都可以省略
        final JavaRDD<Object> mapRDD = rdd.map(num -> num * 2);
        System.out.println(mapRDD.collect());
//   写法简化
        sc.parallelize(Arrays.asList(1,2,3,4,5),2)
                .map(tp -> tp * tp)
                        .sortBy(cp -> cp,false,1)
                                .collect()
                                         .forEach(System.out::println);

//    排序   第一个参数表示排序的规则，第二个true表示升序，false表示降序，第三个是分区



//  释放资源
        sc.close();

    }
}
